   1. /****************************************************************************************/   
   2. /* Copyright � 2004 Altera Corporation, San Jose, California, USA. All rights reserved. */   
   3. /* Permission is hereby granted, free of charge, to any person obtaining a copy of this */   
   4. /* software and associated documentation files (the "Software"), to deal in the Software*/   
   5. /* without restriction, including without limitation the rights to use, copy, modify,   */   
   6. /* merge, publish, distribute, sublicense, and/or sell copies of the Software, and to   */   
   7. /* permit persons to whom the Software is furnished to do so, subject to the following  */   
   8. /* conditions:  The above copyright notice and this permission notice shall be included */   
   9. /* in all copies or substantial portions of the Software.                               */   
  10. /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,  */   
  11. /* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A        */   
  12. /* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT   */   
  13. /* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF */   
  14. /* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE */   
  15. /* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                                        */   
  16. /* This agreement shall be governed in all respects by the laws of the State of         */   
  17. /* California and by the laws of the United States of America.  Altera does not         */   
  18. /* recommend, suggest or require that this reference design file be used in conjunction */   
  19. /* or combination with any other product.                                               */   
  20. /****************************************************************************************/   
  21.    
  22. #include "altera_avalon_pwm_routines.h"   
  23.    
  24.    
  25. int altera_avalon_pwm_init(unsigned int address, unsigned int clock_divider, unsigned int duty_cycle)   
  26. {   
  27.     if(duty_cycle > clock_divider)  //duty cycle reg must be less than or equal to clock divider   
  28.     {   
  29.         return ALTERA_AVALON_PWM_DUTY_CYCLE_GREATER_THAN_CLOCK_CYCLE_ERROR;   
  30.     }   
  31.     else   
  32.     {   
  33.         IOWR_ALTERA_AVALON_PWM_CLOCK_DIVIDER(address, clock_divider - 1);   
  34.         IOWR_ALTERA_AVALON_PWM_DUTY_CYCLE(address, duty_cycle);   
  35.     }   
  36.      return ALTERA_AVALON_PWM_OK;   
  37. }   
  38.    
  39. int altera_avalon_pwm_enable(unsigned int address)   
  40. {   
  41.   IOWR_ALTERA_AVALON_PWM_ENABLE(address, ALTERA_AVALON_PWM_ENABLE_MSK);   
  42.      
  43.   if(IORD_ALTERA_AVALON_PWM_ENABLE(address) != ALTERA_AVALON_PWM_ENABLED) //Confirm PWM is enabled   
  44.   {   
  45.     return ALTERA_AVALON_PWM_ENABLED_CONFIRMATION_ERROR;   
  46.   }   
  47.   return ALTERA_AVALON_PWM_OK;   
  48. }   
  49.    
  50. int altera_avalon_pwm_disable(unsigned int address)   
  51. {   
  52.   IOWR_ALTERA_AVALON_PWM_ENABLE(address, ~ALTERA_AVALON_PWM_ENABLE_MSK);   
  53.    
  54.   if(IORD_ALTERA_AVALON_PWM_ENABLE(address) != ALTERA_AVALON_PWM_DISABLED)  //Confirm PWM is disabled    
  55.   {   
  56.     return ALTERA_AVALON_PWM_DISABLED_CONFIRMATION_ERROR;   
  57.   }   
  58.   return ALTERA_AVALON_PWM_OK;   
  59. }   
  60.    
  61.    
  62. int altera_avalon_pwm_change_duty_cycle(unsigned int address, unsigned int duty_cycle)   
  63. {   
  64.     if(duty_cycle > IORD_ALTERA_AVALON_PWM_CLOCK_DIVIDER(address))  //duty cycle reg must be less than or equal to clock divider   
  65.     {   
  66.         return ALTERA_AVALON_PWM_DUTY_CYCLE_GREATER_THAN_CLOCK_CYCLE_ERROR;   
  67.     }   
  68.     else   
  69.     {   
  70.     IOWR_ALTERA_AVALON_PWM_DUTY_CYCLE(address, duty_cycle);   
  71.     }   
  72.   return ALTERA_AVALON_PWM_OK;   
  73. }   
  74.    



